home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -serious- / misc / cmq060 / source / cmq060.includebeepcmq.s < prev    next >
Text File  |  1999-07-26  |  4KB  |  160 lines

  1. *************************************
  2. *         CopyMemQuicker060 BeepCMQ *
  3. *         Include File V1.0         *
  4. *       written by Dirk Busse       *
  5. *           19. Sep. 1998           *
  6. *************************************
  7.  
  8. PatchStart
  9.  
  10. ;        move.l  a6,-(sp)
  11. ;        movea.l intbase,a6
  12. ;        move.l  a0,-(sp)
  13. ;        move.l  a1,-(sp)
  14. ;        move.l  d0,-(sp)
  15. ;        move.l  #0,a0
  16. ;        jsr     _LVODisplayBeep(a6)
  17. ;        move.l  (sp)+,d0
  18. ;        movea.l (sp)+,a1
  19. ;        movea.l (sp)+,a0
  20. ;        movea.l (sp)+,a6
  21.  
  22.         tst.l   d0
  23.         beq.b   squit
  24.         move.w  a1,d1   ;Zieladresse nach d1 (nur die ersten zwei Bits werden benötigt)
  25.         btst    #0,d1
  26.         beq.b   .skip1
  27.         move.b  (a0)+,(a1)+    ;Zieladresse auf EVEN setzen
  28.         subq.l  #1,d0
  29.         beq.b   squit
  30.         move.w  a1,d1
  31. .skip1  btst    #1,d1
  32.         beq.b   .skip2
  33.         cmpi.l  #1,d0
  34.         bne.b   .two
  35.         move.b  (a0)+,(a1)+
  36.         rts
  37.  
  38. .two    move.w  (a0)+,(a1)+    ;Zieladresse auf LONG setzen
  39.         subq.l  #2,d0
  40.         beq.b   squit
  41. .skip2
  42.         cmpi.l  #%0000100000010000,d0 ;prüfen, ob d0 >2064
  43.         bpl.b   bigmove
  44.  
  45. smlmove move.l  d0,d1
  46.         lsr.w   #2,d1          ;d0 ist hier nur noch maximal 12Bit lang
  47.         beq.b   .nolong
  48. .loop   move.l  (a0)+,(a1)+
  49.         subq.w  #1,d1
  50.         bne.b   .loop
  51.  
  52. .nolong btst    #1,d0
  53.         beq.b   .skip
  54.         move.w  (a0)+,(a1)+    ;letztes Word uebertragen
  55. .skip   btst    #0,d0
  56.         beq.b   squit
  57.         move.b  (a0)+,(a1)+    ;letztes Byte uebertragen
  58. squit   rts
  59.  
  60. bigmove btst    #0,d0
  61.         beq.b   .skip1
  62.         subq.l  #1,d0
  63.         move.b  (a0,d0.l),(a1,d0.l) ;letztes Byte übertragen
  64. .skip1  btst    #1,d0
  65.         beq.b   .skip2
  66.         subq.l  #2,d0
  67.         move.w  (a0,d0.l),(a1,d0.l) ;letztes Word übertragen
  68. .skip2  lsr.l   #2,d0               ;jetzt ist d0 durch 4 teilbar
  69.         jmp     bigmo16
  70.  
  71.   cnop 0,4
  72. **************************************************************************
  73.  
  74. Quickest
  75.         move.l  a6,-(sp)
  76.         movea.l intbase,a6
  77.         move.l  a0,-(sp)
  78.         move.l  a1,-(sp)
  79.         move.l  d0,-(sp)
  80.         move.l  #0,a0
  81.         jsr     _LVODisplayBeep(a6)
  82.         move.l  (sp)+,d0
  83.         movea.l (sp)+,a1
  84.         movea.l (sp)+,a0
  85.         movea.l (sp)+,a6
  86.  
  87.         lsr.l   #2,d0
  88.         cmpi.l  #%0000001000000100,d0 ;prüfen, ob d0 > 2064/4
  89.         bpl.b   bigmo16
  90.  
  91. smlmovQ tst.w   d0          ;d0 ist hier nur noch maximal 10 Bit lang
  92.         beq.b   squitQ
  93. sloopQ  move.l  (a0)+,(a1)+
  94.         subq.w  #1,d0
  95.         bne.b   sloopQ
  96. squitQ  rts
  97.  
  98. bigmo16 move.w  a1,d1
  99.         btst    #2,d1
  100.         beq.b   .skip1
  101.         subq.l  #1,d0       ;Zieladresse auf 8-Byte-Block legen
  102.         move.l  (a0)+,(a1)+
  103.         move.w  a1,d1
  104. .skip1  btst    #3,d1
  105.         beq.b   dest16
  106.         subq.l  #2,d0       ;Zieladresse auf 16-Byte-Block legen
  107.         move.l  (a0)+,(a1)+
  108.         move.l  (a0)+,(a1)+
  109. dest16  move.w  a0,d1
  110.         andi.b  #15,d1
  111.         bne.b   bigmovQ     ;wenn Quelladresse nicht im 16-Byte-Block liegt
  112.  
  113.         move.l  d0,d1
  114.         lsr.l   #5,d1
  115. .loop   move16  (a0)+,(a1)+
  116.         move16  (a0)+,(a1)+
  117.         move16  (a0)+,(a1)+
  118.         move16  (a0)+,(a1)+
  119.         move16  (a0)+,(a1)+
  120.         move16  (a0)+,(a1)+
  121.         move16  (a0)+,(a1)+
  122.         move16  (a0)+,(a1)+
  123.         subq.l  #1,d1
  124.         bne.b   .loop
  125.         and.w   #%0000000000011111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  126.         bne.b   sloopQ
  127.         rts
  128.  
  129. bigmovQ move.l  d0,d1
  130.         lsr.l   #4,d1
  131. .loop   move.l  (a0)+,(a1)+
  132.         move.l  (a0)+,(a1)+
  133.         move.l  (a0)+,(a1)+
  134.         move.l  (a0)+,(a1)+
  135.         move.l  (a0)+,(a1)+
  136.         move.l  (a0)+,(a1)+
  137.         move.l  (a0)+,(a1)+
  138.         move.l  (a0)+,(a1)+
  139.         move.l  (a0)+,(a1)+
  140.         move.l  (a0)+,(a1)+
  141.         move.l  (a0)+,(a1)+
  142.         move.l  (a0)+,(a1)+
  143.         move.l  (a0)+,(a1)+
  144.         move.l  (a0)+,(a1)+
  145.         move.l  (a0)+,(a1)+
  146.         move.l  (a0)+,(a1)+
  147.         subq.l  #1,d1
  148.         bne.b   .loop
  149.         and.w   #%0000000000001111,d0 ;die oberen 16 Bits werden ab hier nichtmehr berücksichtigt
  150.         bne.b   sloopQ
  151.         rts
  152.  
  153.   cnop 0,4
  154.  
  155. intbase
  156.         dc.l    $0
  157.  
  158. PatchEnd
  159.  
  160.